#include <iostream>
using namespace std;

void test01()
{
    /* 
    1.异常的语法
    try
    {

    }
    catch(...)
    {

    }

    2.如果程序出现异常，异常之后的代码就不会执行了。 */
    cout << "111" << endl;
    for (int idx = 0; idx < 1000000000; idx++)
    {
        try
        {
            int* array = new int[1000000000];
            cout << "222" << endl;
        }
        catch(...) /* 捕捉任意异常 */
        {
            cout << "内存不足" << endl;
            break;
        }
        /* 如果异常不被处理，程序就终止 */
    }
    cout << "333" << endl;
}
/*
    主动抛异常
    语法:
        throw (int)123 : 整形
        throw (string)"123" : 字符串
*/
int myDivide(int val1, int val2)
{
    if(val1 == 0 || val2 == 0)
    {
        #if 0
        throw"除数不能为0";
        #else 
        throw 1;
        #endif
    }
    return val1 / val2;
}

/* 异常常声明：
    case 1: 不会抛出任何异常 */
int func1() noexcept
{
    return 0;
}

/* 异常声明:
    case 2:可能抛出异常 */
int func2() noexcept(false)
{
    return 0;
}

/* 1.捕捉异常 */
int main()
{
    try
    {
        myDivide(100, 0);
    }
    catch(const char* str)
    {
        cout << "该函数抛出异常:" << str <<endl;
    }
    catch(int code)
    {
        cout << "该函数抛出异常:" << code <<endl;
    }
    return 0;
}